﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AgendaManager.AgendaService;
using System.Net.Mail;

namespace AgendaManager
{
    public partial class frmLogIn : Form
    {
        public Usuario Usuario { get; set; }

        public frmLogIn()
        {
            InitializeComponent();
        }

        private void btAceptar_Click(object sender, EventArgs e)
        {
            if (txUser.Text == string.Empty || txPassword.Text == string.Empty)
            {
                MessageBox.Show("Por favor introduzca Nombre de Usuario y Password", 
                    "Error iniciando sesión", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            try
            {
                //ToDo: Borrar.
                //AgendaService.Service1 ws = ConnectHelper.ws;//new AgendaService.Service1();

                Usuario usuario = ConnectHelper.ws.LogIn(txUser.Text.Trim(), txPassword.Text.Trim());
                if (usuario.Id != 0)
                {
                    if (usuario.PrimeraVez)
                    {
                        frmNuevaContraseña f = new frmNuevaContraseña();
                        f.Usuario = usuario;

                        f.ShowDialog();
                    }

                    this.Usuario = usuario;

                    MessageBox.Show("Bienvenido " + txUser.Text + "!",
                        "Inicio de sesión Exitoso", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

                    this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Por favor verifique Nombre de Usuario y Password",
                        "Error iniciando sesión", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            }
            catch (System.Net.WebException wex)
            {
                if (wex.Status == System.Net.WebExceptionStatus.ConnectFailure)
                {
                    try
                    {
                        EnviameNotificacion();
                        MessageBox.Show(@"Ocurrio un problema iniciando sesión, algunos datos de configuración se encuentran desactualizados.
\nSe ha enviado un correo electronico al administrador del sistema, pronto se le enviará un email con la correción.
\nDisculpe las molestias ocacionadas.",
                            "Error iniciando sesión", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show(@"Ocurrio un problema iniciando sesión, algunos datos de configuración se encuentran desactualizados. 
Se ha enviado un correo electronico al administrador del sistema, pronto se le enviará un email con la correción.Disculpe las molestias ocacionadas.",
                            "Error iniciando sesión", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ocurrio un problema iniciando sesión, intente mas tarde. \nSi el problema persiste contactesé con duarte.fabricio.90@gmail.com",
                   "Error iniciando sesión", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return;
            }
            
        }

        private void EnviameNotificacion()
        {
            try
            {
                System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
                message.To.Add("duarte.fabricio.90@gmail.com");
                message.Subject = "Error de IP";
                message.From = new System.Net.Mail.MailAddress("system_as@outlook.com", "SystemAs");
                message.Priority = MailPriority.High;

                string text = string.Format("Mala IP del servidor para el usuario: {0}, está probando con la IP: {1}", txUser.Text, ConnectHelper.ws.Url);
                message.Body = text;

                SmtpClient smtpClient = new SmtpClient("smtp.live.com", 587);
                smtpClient.EnableSsl = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials = new System.Net.NetworkCredential("system_as@outlook.com", "q1w2e3r4t5");

                smtpClient.Send(message);
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void RecordarPassword_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            new frmRecordarPassword().ShowDialog();
        }

        private void configuraciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (frmConfiguracion frm = new frmConfiguracion())
            {
                if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    MessageBox.Show("Se actualizó la configuración, por favor cierre vuelva a iniciar el programa para aplicar los cambios",
                   "Configuración del sistema", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

                    Application.Exit();
                }
            }
        }

        private void NuevoUsuario_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            new frmNuevoUsuario().ShowDialog();
        }
    }
}
